Compilers are software programs that convert source code written in a high-level language such as C to binary code that can be executed by a target microprocessor. Thus, the compiler translates high level instructions written by the software developer to a format that can be read and understood by the microprocessor.
The behavior of compilers may change from version to version. For example, the GCC compiler has seen significant changes in its feature set and compilation behavior over successive versions, so that the same source code will compile to a very different executable under a different compiler version, or more often, fail to compile at all. This changing of behavior in the compiler presents a number of difficulties to a software owner who may wish to recompile a software that was built using an old version of the compiler with a new version that includes a desired compiler feature. The rebuilding generally requires the software owner to make significant modifications to the software's source code or backport the feature to the old compiler. Both of these options can be extremely difficult and time-consuming. In another context, it is sometimes desirable to generate a hot patch for a software system that can be applied while the system is executing. In most cases, such a hot patch must be created using the same version of the compiler that generated the other portions of the system. Unfortunately, desired compiler features that are needed for the hot patch may not have been backported to the original compiler version. In practice, these problems mean that software owners must maintain not only their own source code, but a version of the compiler that is compatible with the source code, in order to support the creation of future hot patches.
While embodiments are described herein by way of example for several embodiments and illustrative drawings, those skilled in the art will recognize that embodiments are not limited to the embodiments or drawings described. It should be understood, that the drawings and detailed description thereto are not intended to limit embodiments to the particular form disclosed, but on the contrary, the intention is to cover all modifications, equivalents and alternatives falling within the spirit and scope as defined by the appended claims. The headings used herein are for organizational purposes only and are not meant to be used to limit the scope of the description or the claims. As used throughout this application, the word “may” is used in a permissive sense (i.e., meaning having the potential to), rather than the mandatory sense (i.e., meaning must). Similarly, the words “include,” “including,” and “includes” mean including, but not limited to.
It will also be understood that, although the terms first, second, etc. may be used herein to describe various elements, these elements should not be limited by these terms. These terms are only used to distinguish one element from another. For example, a first contact could be termed a second contact, and, similarly, a second contact could be termed a first contact, without departing from the scope of the present invention. The first contact and the second contact are both contacts, but they are not the same contact.